import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class GemeindeTCPServer extends Thread {

	public GemeindeTCPServer() {
		this.start();
	}

	public void run() {
		waitForConnectionAndStartThread();
	}

	/**
	 * Oeffnet listenSocket auf Port 7896
	 * Wartet auf Verbidung
	 * Startet Request() Thread mit angenommener Verbindung
	 */
	private void waitForConnectionAndStartThread() {
		try {
			System.out.println("Server: Der Gemeinde-Server ist gestartet");
			int serverPort = 7896;
			ServerSocket listenSocket = new ServerSocket(serverPort);
			while (true) {
				Socket clientSocket = listenSocket.accept();
				System.out.println("Neue Verbindung");
				Request c = new Request(clientSocket);
			}
		} catch (IOException e) {
			System.out.println("Server: Listen :" + e.getMessage());
		}
	}
	
	public static void main(String args[]) {
		GemeindeTCPServer server = new GemeindeTCPServer();
	}
}


class Request extends Thread {
	ObjectInputStream in;

	DataOutputStream out;

	Socket clientSocket;

	public Request(Socket aClientSocket) {
		getStreamAndStartThread(aClientSocket);
	}

	private void getStreamAndStartThread(Socket aClientSocket) {
		try {
			clientSocket = aClientSocket;
			out = new DataOutputStream(clientSocket.getOutputStream());
			in = new ObjectInputStream(clientSocket.getInputStream());
			this.start();
		} catch (IOException e) {
			System.out.println(" Connection:" + e.getMessage());
		}
		
	}
	public void run() {
		try {
			DataObject request = (DataObject) in.readObject();

			// Testausgabe
			System.out.println("Server: Request ist: " + request.data.get(0));
			if (request.data.get(0).equals("1")) {
				System.out.println("Server: Es wurde 1 angefragt");
				System.out.println("Server: Mit folgenden Parametern: ");
				for (int i = 1; i < request.data.size(); i++) {
					System.out.println(request.data.get(i).toString());
				}
			}
			if (request.data.get(0).equals("2")) {
				System.out.println("Server: Es wurde 2 angefragt");
				System.out.println("Server: Mit folgenden Parametern: ");
				for (int i = 1; i < request.data.size(); i++) {
					System.out.println(request.data.get(i).toString());
				}
			}
			System.out.println("Server: Verbindung wird geschlossen");
			clientSocket.close();
		} catch (Exception e) {
			System.out.println("Server:  Exception:" + e.getMessage());
		}
	}
}